package com.foreveross.mofang.datapersistence.infra.utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * 用于json转list工具类，如果直接使用jsonlib的toList或是toCollection不能正常map转换
 * 会出现MorphDynaBean类型，此类不能转成map或是list,处理不便
 * 
 * @author fb
 */
@SuppressWarnings("unchecked")
public class JSONHelper {
		/**
		 * 将JSONArray对象转换成Map-List集合
		 * 
		 * @param jsonArr
		 * @return
		 */
		public static Object JsonToList(JSONArray jsonArr) {
			List<Object> jsonObjList = new ArrayList<Object>();
			for (Object obj : jsonArr) {
				if (obj instanceof JSONArray) {
					jsonObjList.add(JsonToList((JSONArray) obj));
				} else if (obj instanceof JSONObject) {
					jsonObjList.add(JsonToMap((JSONObject) obj));
				} else {
					jsonObjList.add(obj);
				}
			}
			return jsonObjList;
		}

		/**
		 * 将JSONObjec对象转换成Map-List集合
		 * 
		 * @param json
		 * @return
		 */
		public static Map<String, Object> JsonToMap(JSONObject json) {
			Map<String, Object> columnValMap = new HashMap<String, Object>();
			Set<Object> jsonKeys = json.keySet();
			for (Object key : jsonKeys) {
				Object JsonValObj = json.get(key);
				if (JsonValObj instanceof JSONArray) {
					columnValMap.put((String) key, JsonToList((JSONArray) JsonValObj));
				} else if (key instanceof JSONObject) {
					columnValMap.put((String) key, JsonToMap((JSONObject) JsonValObj));
				} else {
					columnValMap.put((String) key, JsonValObj);
				}
			}
			return columnValMap;
		}

}
